/**
 * \file screenpig/render.c
 * \date 01-17-2010
 * \author Davide Gessa
 */
#include "include/render.h"

#include <types.h>
#include <malloc.h>
#include <driver/video/vesa.h>
#include <debug.h>


/**
 * Font di default
 */
char default_font_8x16[255][16] = { 
	{ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0},
	{ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0},
	{ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0},
	{ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0},
	{ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0},
	{ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0},
	{ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0},
	{ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0},
	{ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0},
	{ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0},
	{ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0},
	{ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0},
	{ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0},
	{ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0},
	{ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0},
	{ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0},
	{ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0},
	{ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0},
	{ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0},
	{ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0},
	{ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0},
	{ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0},
	{ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0},
	{ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0},
	{ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0},
	{ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0},
	{ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0},
	{ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0},
	{ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0},
	{ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0},
	{ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0},
	{ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0},
	{ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0},
	{ 0x0, 0x0, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x0, 0x2, 0x0, 0x0, 0x0, 0x0 },
	{ 0x0, 0x0, 0x0, 0xa, 0xa, 0xa, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 },
	{ 0x0, 0x0, 0x0, 0x24, 0x24, 0x7e, 0x24, 0x24, 0x24, 0x7e, 0x24, 0x24, 0x0, 0x0, 0x0, 0x0 },
	{ 0x0, 0x0, 0x0, 0x8, 0x1c, 0x2a, 0xa, 0xc, 0x18, 0x28, 0x2a, 0x1c, 0x8, 0x0, 0x0, 0x0 },
	{ 0x0, 0x0, 0x0, 0x4, 0x8a, 0x4a, 0x24, 0x10, 0x48, 0xa4, 0xa2, 0x40, 0x0, 0x0, 0x0, 0x0 },
	{ 0x0, 0x0, 0x0, 0x0, 0x4, 0xa, 0xa, 0xa, 0x4, 0x2a, 0x12, 0x2c, 0x0, 0x0, 0x0, 0x0 },
	{ 0x0, 0x0, 0x0, 0x2, 0x2, 0x2, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 },
	{ 0x0, 0x0, 0x0, 0x4, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x4, 0x0, 0x0, 0x0 },
	{ 0x0, 0x0, 0x0, 0x2, 0x4, 0x4, 0x4, 0x4, 0x4, 0x4, 0x4, 0x4, 0x2, 0x0, 0x0, 0x0 },
	{ 0x0, 0x0, 0x0, 0xa, 0x4, 0xa, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 },
	{ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x8, 0x8, 0x3e, 0x8, 0x8, 0x0, 0x0, 0x0, 0x0, 0x0 },
	{ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4, 0x4, 0x2, 0x0, 0x0, 0x0 },
	{ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 },
	{ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2, 0x0, 0x0, 0x0, 0x0 },
	{ 0x0, 0x0, 0x0, 0x10, 0x10, 0x10, 0x8, 0x8, 0x4, 0x4, 0x2, 0x2, 0x0, 0x0, 0x0, 0x0 },
	{ 0x0, 0x0, 0x0, 0x1c, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x1c, 0x0, 0x0, 0x0, 0x0 },
	{ 0x0, 0x0, 0x0, 0x8, 0xe, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x0, 0x0, 0x0, 0x0 },
	{ 0x0, 0x0, 0x0, 0x1c, 0x22, 0x20, 0x20, 0x10, 0x8, 0x4, 0x2, 0x3e, 0x0, 0x0, 0x0, 0x0 },
	{ 0x0, 0x0, 0x0, 0x1c, 0x22, 0x20, 0x20, 0x18, 0x20, 0x20, 0x22, 0x1c, 0x0, 0x0, 0x0, 0x0 },
	{ 0x0, 0x0, 0x0, 0x10, 0x18, 0x14, 0x14, 0x12, 0x3e, 0x10, 0x10, 0x10, 0x0, 0x0, 0x0, 0x0 },
	{ 0x0, 0x0, 0x0, 0x3e, 0x2, 0x2, 0x1e, 0x22, 0x20, 0x20, 0x22, 0x1c, 0x0, 0x0, 0x0, 0x0 },
	{ 0x0, 0x0, 0x0, 0x10, 0x8, 0x4, 0x2, 0x1e, 0x22, 0x22, 0x22, 0x1c, 0x0, 0x0, 0x0, 0x0 },
	{ 0x0, 0x0, 0x0, 0x3e, 0x20, 0x10, 0x10, 0x8, 0x8, 0x4, 0x4, 0x4, 0x0, 0x0, 0x0, 0x0 },
	{ 0x0, 0x0, 0x0, 0x1c, 0x22, 0x22, 0x22, 0x1c, 0x22, 0x22, 0x22, 0x1c, 0x0, 0x0, 0x0, 0x0 },
	{ 0x0, 0x0, 0x0, 0x1c, 0x22, 0x22, 0x22, 0x3c, 0x20, 0x10, 0x8, 0x4, 0x0, 0x0, 0x0, 0x0 },
	{ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2, 0x0, 0x0, 0x0, 0x0, 0x2, 0x0, 0x0, 0x0, 0x0 },
	{ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4, 0x0, 0x0, 0x0, 0x4, 0x4, 0x2, 0x0, 0x0, 0x0 },
	{ 0x0, 0x0, 0x0, 0x0, 0x0, 0x10, 0x8, 0x4, 0x2, 0x4, 0x8, 0x10, 0x0, 0x0, 0x0, 0x0 },
	{ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3e, 0x0, 0x3e, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 },
	{ 0x0, 0x0, 0x0, 0x0, 0x0, 0x2, 0x4, 0x8, 0x10, 0x8, 0x4, 0x2, 0x0, 0x0, 0x0, 0x0 },
	{ 0x0, 0x0, 0x0, 0x1c, 0x22, 0x22, 0x20, 0x10, 0x8, 0x8, 0x0, 0x8, 0x0, 0x0, 0x0, 0x0 },
	{ 0x0, 0x0, 0x0, 0xf0, 0x8, 0x4, 0x62, 0x92, 0x92, 0xe2, 0x4, 0x8, 0xf0, 0x0, 0x0, 0x0 },
	{ 0x0, 0x0, 0x0, 0x8, 0x8, 0x14, 0x14, 0x22, 0x3e, 0x41, 0x41, 0x41, 0x0, 0x0, 0x0, 0x0 },
	{ 0x0, 0x0, 0x0, 0x3e, 0x42, 0x42, 0x42, 0x3e, 0x42, 0x42, 0x42, 0x3e, 0x0, 0x0, 0x0, 0x0 },
	{ 0x0, 0x0, 0x0, 0x3c, 0x42, 0x2, 0x2, 0x2, 0x2, 0x2, 0x42, 0x3c, 0x0, 0x0, 0x0, 0x0 },
	{ 0x0, 0x0, 0x0, 0x1e, 0x22, 0x42, 0x42, 0x42, 0x42, 0x42, 0x22, 0x1e, 0x0, 0x0, 0x0, 0x0 },
	{ 0x0, 0x0, 0x0, 0x3e, 0x2, 0x2, 0x2, 0x1e, 0x2, 0x2, 0x2, 0x3e, 0x0, 0x0, 0x0, 0x0 },
	{ 0x0, 0x0, 0x0, 0x3e, 0x2, 0x2, 0x2, 0x1e, 0x2, 0x2, 0x2, 0x2, 0x0, 0x0, 0x0, 0x0 },
	{ 0x0, 0x0, 0x0, 0x3c, 0x42, 0x2, 0x2, 0x72, 0x42, 0x42, 0x42, 0x3c, 0x0, 0x0, 0x0, 0x0 },
	{ 0x0, 0x0, 0x0, 0x42, 0x42, 0x42, 0x42, 0x7e, 0x42, 0x42, 0x42, 0x42, 0x0, 0x0, 0x0, 0x0 },
	{ 0x0, 0x0, 0x0, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x0, 0x0, 0x0, 0x0 },
	{ 0x0, 0x0, 0x0, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x9, 0x9, 0x6, 0x0, 0x0, 0x0, 0x0 },
	{ 0x0, 0x0, 0x0, 0x42, 0x22, 0x12, 0xa, 0x6, 0xa, 0x12, 0x22, 0x42, 0x0, 0x0, 0x0, 0x0 },
	{ 0x0, 0x0, 0x0, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x3e, 0x0, 0x0, 0x0, 0x0 },
	{ 0x0, 0x0, 0x0, 0x82, 0xc6, 0xc6, 0xaa, 0xaa, 0x92, 0x92, 0x82, 0x82, 0x0, 0x0, 0x0, 0x0 },
	{ 0x0, 0x0, 0x0, 0x42, 0x42, 0x46, 0x4a, 0x4a, 0x52, 0x62, 0x42, 0x42, 0x0, 0x0, 0x0, 0x0 },
	{ 0x0, 0x0, 0x0, 0x3c, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x3c, 0x0, 0x0, 0x0, 0x0 },
	{ 0x0, 0x0, 0x0, 0x3e, 0x42, 0x42, 0x42, 0x3e, 0x2, 0x2, 0x2, 0x2, 0x0, 0x0, 0x0, 0x0 },
	{ 0x0, 0x0, 0x0, 0x3c, 0x42, 0x42, 0x42, 0x42, 0x42, 0x52, 0x62, 0x3c, 0x40, 0x0, 0x0, 0x0 },
	{ 0x0, 0x0, 0x0, 0x3e, 0x42, 0x42, 0x42, 0x3e, 0x12, 0x22, 0x42, 0x42, 0x0, 0x0, 0x0, 0x0 },
	{ 0x0, 0x0, 0x0, 0x1c, 0x22, 0x2, 0x2, 0x1c, 0x20, 0x20, 0x22, 0x1c, 0x0, 0x0, 0x0, 0x0 },
	{ 0x0, 0x0, 0x0, 0x3e, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x0, 0x0, 0x0, 0x0 },
	{ 0x0, 0x0, 0x0, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x3c, 0x0, 0x0, 0x0, 0x0 },
	{ 0x0, 0x0, 0x0, 0x41, 0x41, 0x22, 0x22, 0x22, 0x14, 0x14, 0x14, 0x8, 0x0, 0x0, 0x0, 0x0 },
	{ 0x0, 0x0, 0x0, 0x1, 0x1, 0x22, 0x22, 0x52, 0x54, 0x54, 0x88, 0x88, 0x0, 0x0, 0x0, 0x0 },
	{ 0x0, 0x0, 0x0, 0x41, 0x41, 0x22, 0x14, 0x8, 0x14, 0x22, 0x41, 0x41, 0x0, 0x0, 0x0, 0x0 },
	{ 0x0, 0x0, 0x0, 0x41, 0x41, 0x22, 0x14, 0x8, 0x8, 0x8, 0x8, 0x8, 0x0, 0x0, 0x0, 0x0 },
	{ 0x0, 0x0, 0x0, 0x7f, 0x40, 0x20, 0x10, 0x8, 0x4, 0x2, 0x1, 0x7f, 0x0, 0x0, 0x0, 0x0 },
	{ 0x0, 0x0, 0x0, 0x6, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x6, 0x0, 0x0 },
	{ 0x0, 0x0, 0x0, 0x2, 0x2, 0x2, 0x4, 0x4, 0x8, 0x8, 0x10, 0x10, 0x0, 0x0, 0x0, 0x0 },
	{ 0x0, 0x0, 0x0, 0x6, 0x4, 0x4, 0x4, 0x4, 0x4, 0x4, 0x4, 0x4, 0x4, 0x6, 0x0, 0x0 },
	{ 0x0, 0x8, 0x14, 0x22, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 },
	{ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3f, 0x0, 0x0, 0x0 },
	{ 0x0, 0x0, 0x2, 0x4, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 },
	{ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1c, 0x20, 0x3c, 0x22, 0x22, 0x3c, 0x0, 0x0, 0x0, 0x0 },
	{ 0x0, 0x0, 0x0, 0x2, 0x2, 0x2, 0x1e, 0x22, 0x22, 0x22, 0x22, 0x1e, 0x0, 0x0, 0x0, 0x0 },
	{ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1c, 0x22, 0x2, 0x2, 0x22, 0x1c, 0x0, 0x0, 0x0, 0x0 },
	{ 0x0, 0x0, 0x0, 0x20, 0x20, 0x20, 0x3c, 0x22, 0x22, 0x22, 0x22, 0x3c, 0x0, 0x0, 0x0, 0x0 },
	{ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1c, 0x22, 0x3e, 0x2, 0x22, 0x1c, 0x0, 0x0, 0x0, 0x0 },
	{ 0x0, 0x0, 0x0, 0x4, 0x2, 0x2, 0x6, 0x2, 0x2, 0x2, 0x2, 0x2, 0x0, 0x0, 0x0, 0x0 },
	{ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1c, 0x22, 0x22, 0x22, 0x22, 0x3c, 0x20, 0x1c, 0x0, 0x0 },
	{ 0x0, 0x0, 0x0, 0x2, 0x2, 0x2, 0x1a, 0x26, 0x22, 0x22, 0x22, 0x22, 0x0, 0x0, 0x0, 0x0 },
	{ 0x0, 0x0, 0x0, 0x2, 0x0, 0x0, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x0, 0x0, 0x0, 0x0 },
	{ 0x0, 0x0, 0x0, 0x2, 0x0, 0x0, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x1, 0x0, 0x0 },
	{ 0x0, 0x0, 0x0, 0x2, 0x2, 0x2, 0x22, 0x12, 0xa, 0xe, 0x12, 0x22, 0x0, 0x0, 0x0, 0x0 },
	{ 0x0, 0x0, 0x0, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x0, 0x0, 0x0, 0x0 },
	{ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6e, 0x92, 0x92, 0x92, 0x92, 0x92, 0x0, 0x0, 0x0, 0x0 },
	{ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1a, 0x26, 0x22, 0x22, 0x22, 0x22, 0x0, 0x0, 0x0, 0x0 },
	{ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1c, 0x22, 0x22, 0x22, 0x22, 0x1c, 0x0, 0x0, 0x0, 0x0 },
	{ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1e, 0x22, 0x22, 0x22, 0x22, 0x1e, 0x2, 0x2, 0x0, 0x0 },
	{ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3c, 0x22, 0x22, 0x22, 0x22, 0x3c, 0x20, 0x20, 0x0, 0x0 },
	{ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6, 0x2, 0x2, 0x2, 0x2, 0x2, 0x0, 0x0, 0x0, 0x0 },
	{ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xc, 0x12, 0x4, 0x8, 0x12, 0xc, 0x0, 0x0, 0x0, 0x0 },
	{ 0x0, 0x0, 0x0, 0x0, 0x2, 0x2, 0x6, 0x2, 0x2, 0x2, 0x2, 0x4, 0x0, 0x0, 0x0, 0x0 },
	{ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x22, 0x22, 0x22, 0x22, 0x32, 0x2c, 0x0, 0x0, 0x0, 0x0 },
	{ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x22, 0x22, 0x14, 0x14, 0x8, 0x8, 0x0, 0x0, 0x0, 0x0 },
	{ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x92, 0xaa, 0xaa, 0xaa, 0x44, 0x44, 0x0, 0x0, 0x0, 0x0 },
	{ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x12, 0x12, 0xc, 0xc, 0x12, 0x12, 0x0, 0x0, 0x0, 0x0 },
	{ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x12, 0x12, 0x12, 0x12, 0x12, 0x1c, 0x10, 0xe, 0x0, 0x0 },
	{ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1e, 0x10, 0x8, 0x4, 0x2, 0x1e, 0x0, 0x0, 0x0, 0x0 },
	{ 0x0, 0x0, 0x8, 0x4, 0x4, 0x4, 0x4, 0x2, 0x4, 0x4, 0x4, 0x4, 0x8, 0x0, 0x0, 0x0 },
	{ 0x0, 0x0, 0x0, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x0, 0x0, 0x0 },
	{ 0x0, 0x0, 0x2, 0x4, 0x4, 0x4, 0x4, 0x8, 0x4, 0x4, 0x4, 0x4, 0x2, 0x0, 0x0, 0x0 },
	{ 0x0, 0x0, 0x0, 0x4c, 0x32, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 },
	{ 0x0, 0x6, 0x6, 0x6, 0x6, 0x6, 0x6, 0x6, 0x6, 0x6, 0x6, 0x6, 0x6, 0x6, 0x0, 0x0 },
	{ 0x0, 0x0, 0x0, 0x1c, 0x22, 0x2, 0xf, 0x2, 0xf, 0x2, 0x22, 0x1c, 0x0, 0x0, 0x0, 0x0 },
	{ 0x0, 0x6, 0x6, 0x6, 0x6, 0x6, 0x6, 0x6, 0x6, 0x6, 0x6, 0x6, 0x6, 0x6, 0x0, 0x0 },
	{ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4, 0x2, 0x0, 0x0, 0x0 },
	{ 0x0, 0x6, 0x6, 0x6, 0x6, 0x6, 0x6, 0x6, 0x6, 0x6, 0x6, 0x6, 0x6, 0x6, 0x0, 0x0 },
	{ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x14, 0xa, 0x0, 0x0, 0x0 },
	{ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2a, 0x0, 0x0, 0x0, 0x0 },
	{ 0x0, 0x0, 0x0, 0x0, 0x4, 0x4, 0x1f, 0x4, 0x4, 0x4, 0x4, 0x4, 0x0, 0x0, 0x0, 0x0 },
	{ 0x0, 0x0, 0x0, 0x0, 0x4, 0x4, 0x1f, 0x4, 0x4, 0x4, 0x1f, 0x4, 0x0, 0x0, 0x0, 0x0 },
	{ 0x0, 0x6, 0x6, 0x6, 0x6, 0x6, 0x6, 0x6, 0x6, 0x6, 0x6, 0x6, 0x6, 0x6, 0x0, 0x0 },
	{ 0x0, 0x0, 0x0, 0x86, 0x49, 0x26, 0x10, 0x8, 0x4, 0x32, 0xc9, 0x30, 0x0, 0x0, 0x0, 0x0 },
	{ 0x0, 0x14, 0x8, 0x1c, 0x22, 0x2, 0x2, 0x1c, 0x20, 0x20, 0x22, 0x1c, 0x0, 0x0, 0x0, 0x0 },
	{ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x8, 0x4, 0x2, 0x4, 0x8, 0x0, 0x0, 0x0, 0x0 },
	{ 0x0, 0x6, 0x6, 0x6, 0x6, 0x6, 0x6, 0x6, 0x6, 0x6, 0x6, 0x6, 0x6, 0x6, 0x0, 0x0 },
	{ 0x0, 0x6, 0x6, 0x6, 0x6, 0x6, 0x6, 0x6, 0x6, 0x6, 0x6, 0x6, 0x6, 0x6, 0x0, 0x0 },
	{ 0x0, 0x14, 0x8, 0x7f, 0x40, 0x20, 0x10, 0x8, 0x4, 0x2, 0x1, 0x7f, 0x0, 0x0, 0x0, 0x0 },
	{ 0x0, 0x6, 0x6, 0x6, 0x6, 0x6, 0x6, 0x6, 0x6, 0x6, 0x6, 0x6, 0x6, 0x6, 0x0, 0x0 },
	{ 0x0, 0x6, 0x6, 0x6, 0x6, 0x6, 0x6, 0x6, 0x6, 0x6, 0x6, 0x6, 0x6, 0x6, 0x0, 0x0 },
	{ 0x0, 0x0, 0x0, 0x0, 0x4, 0x2, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 },
	{ 0x0, 0x0, 0x0, 0x0, 0x4, 0x2, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 },
	{ 0x0, 0x0, 0x0, 0x0, 0xa, 0x5, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 },
	{ 0x0, 0x0, 0x0, 0x0, 0xa, 0x5, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 },
	{ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xc, 0x1e, 0xc, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 },
	{ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xe, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 },
	{ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3f, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 },
	{ 0x0, 0x6, 0x6, 0x6, 0x6, 0x6, 0x6, 0x6, 0x6, 0x6, 0x6, 0x6, 0x6, 0x6, 0x0, 0x0 },
	{ 0x0, 0x0, 0x0, 0xb7, 0x52, 0x12, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 },
	{ 0x0, 0x0, 0x0, 0x14, 0x8, 0x0, 0xc, 0x12, 0x4, 0x8, 0x12, 0xc, 0x0, 0x0, 0x0, 0x0 },
	{ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4, 0x8, 0x10, 0x8, 0x4, 0x0, 0x0, 0x0, 0x0 },
	{ 0x0, 0x6, 0x6, 0x6, 0x6, 0x6, 0x6, 0x6, 0x6, 0x6, 0x6, 0x6, 0x6, 0x6, 0x0, 0x0 },
	{ 0x0, 0x6, 0x6, 0x6, 0x6, 0x6, 0x6, 0x6, 0x6, 0x6, 0x6, 0x6, 0x6, 0x6, 0x0, 0x0 },
	{ 0x0, 0x0, 0x0, 0x14, 0x8, 0x0, 0x1e, 0x10, 0x8, 0x4, 0x2, 0x1e, 0x0, 0x0, 0x0, 0x0 },
	{ 0x0, 0x6, 0x6, 0x6, 0x6, 0x6, 0x6, 0x6, 0x6, 0x6, 0x6, 0x6, 0x6, 0x6, 0x0, 0x0 },
	{ 0x0, 0x0, 0x0, 0x0, 0x0, 0x2, 0x0, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x0 },
	{ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x10, 0x1c, 0x22, 0x2, 0x2, 0x22, 0x1c, 0x4, 0x0, 0x0 },
	{ 0x0, 0x0, 0x0, 0x0, 0x1c, 0x22, 0x2, 0x4, 0x1f, 0x4, 0x4, 0x2, 0x3e, 0x0, 0x0, 0x0 },
	{ 0x0, 0x0, 0x0, 0x0, 0x22, 0x1c, 0x22, 0x22, 0x1c, 0x22, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 },
	{ 0x0, 0x0, 0x0, 0x0, 0x22, 0x22, 0x22, 0x14, 0x3e, 0x8, 0x3e, 0x8, 0x8, 0x0, 0x0, 0x0 },
	{ 0x0, 0x0, 0x0, 0x0, 0x2, 0x2, 0x2, 0x2, 0x2, 0x0, 0x2, 0x2, 0x2, 0x2, 0x2, 0x0 },
	{ 0x0, 0x0, 0x0, 0x0, 0x1c, 0x22, 0x4, 0xa, 0x12, 0x24, 0x28, 0x10, 0x22, 0x1c, 0x0, 0x0 },
	{ 0x0, 0x0, 0x0, 0x0, 0x0, 0x5, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 },
	{ 0x0, 0x0, 0x0, 0x0, 0x78, 0x84, 0x32, 0xa, 0xa, 0x32, 0x84, 0x78, 0x0, 0x0, 0x0, 0x0 },
	{ 0x0, 0x0, 0x0, 0x0, 0x6, 0x8, 0xe, 0xa, 0xe, 0x0, 0xe, 0x0, 0x0, 0x0, 0x0, 0x0 },
	{ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x28, 0x14, 0xa, 0x14, 0x28, 0x0, 0x0, 0x0 },
	{ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3e, 0x20, 0x0, 0x0, 0x0, 0x0, 0x0 },
	{ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 },
	{ 0x0, 0x0, 0x0, 0x0, 0x0, 0x7c, 0x82, 0x9a, 0x9a, 0xaa, 0x82, 0x7c, 0x0, 0x0, 0x0, 0x0 },
	{ 0x0, 0x0, 0x0, 0x3f, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 },
	{ 0x0, 0x0, 0x0, 0x0, 0x4, 0xa, 0x4, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 },
	{ 0x0, 0x0, 0x0, 0x0, 0x0, 0x8, 0x8, 0x3e, 0x8, 0x8, 0x0, 0x3e, 0x0, 0x0, 0x0, 0x0 },
	{ 0x0, 0x0, 0x0, 0x0, 0x2, 0x5, 0x4, 0x2, 0x7, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 },
	{ 0x0, 0x0, 0x0, 0x0, 0x3, 0x4, 0x2, 0x4, 0x3, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 },
	{ 0x0, 0x0, 0x0, 0x0, 0x4, 0x2, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 },
	{ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x12, 0x12, 0x12, 0x12, 0x12, 0x2e, 0x2, 0x2, 0x0 },
	{ 0x0, 0x0, 0x0, 0x0, 0x3c, 0x2a, 0x2a, 0x2c, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x0, 0x0 },
	{ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 },
	{ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4, 0x2, 0x0 },
	{ 0x0, 0x0, 0x0, 0x0, 0x4, 0x6, 0x4, 0x4, 0x4, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 },
	{ 0x0, 0x0, 0x0, 0x0, 0xe, 0xa, 0xa, 0xa, 0xe, 0x0, 0xe, 0x0, 0x0, 0x0, 0x0, 0x0 },
	{ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xa, 0x14, 0x28, 0x14, 0xa, 0x0, 0x0, 0x0 },
	{ 0x0, 0x0, 0x0, 0x0, 0x0, 0x4, 0x86, 0x44, 0xa4, 0xd4, 0xa8, 0xe4, 0x82, 0x0, 0x0, 0x0 },
	{ 0x0, 0x0, 0x0, 0x0, 0x0, 0x4, 0x86, 0x44, 0x24, 0xf4, 0x88, 0x44, 0xe2, 0x0, 0x0, 0x0 },
	{ 0x0, 0x0, 0x0, 0x0, 0x0, 0xe, 0x88, 0x4c, 0xa8, 0xd6, 0xa8, 0xe4, 0x82, 0x0, 0x0, 0x0 },
	{ 0x0, 0x0, 0x0, 0x0, 0x0, 0x8, 0x0, 0x8, 0x8, 0x8, 0x4, 0x2, 0x22, 0x22, 0x1c, 0x0 },
	{ 0x0, 0x0, 0x4, 0x8, 0x8, 0x8, 0x14, 0x14, 0x22, 0x3e, 0x41, 0x41, 0x41, 0x0, 0x0, 0x0 },
	{ 0x0, 0x0, 0x10, 0x8, 0x8, 0x8, 0x14, 0x14, 0x22, 0x3e, 0x41, 0x41, 0x41, 0x0, 0x0, 0x0 },
	{ 0x0, 0x0, 0x8, 0x14, 0x0, 0x8, 0x14, 0x14, 0x22, 0x3e, 0x41, 0x41, 0x41, 0x0, 0x0, 0x0 },
	{ 0x0, 0x0, 0x2c, 0x1a, 0x8, 0x8, 0x14, 0x14, 0x22, 0x3e, 0x41, 0x41, 0x41, 0x0, 0x0, 0x0 },
	{ 0x0, 0x0, 0x22, 0x0, 0x8, 0x8, 0x14, 0x14, 0x22, 0x3e, 0x41, 0x41, 0x41, 0x0, 0x0, 0x0 },
	{ 0x0, 0x0, 0x8, 0x14, 0x8, 0x8, 0x14, 0x14, 0x22, 0x3e, 0x41, 0x41, 0x41, 0x0, 0x0, 0x0 },
	{ 0x0, 0x0, 0x0, 0x0, 0xe0, 0x30, 0x28, 0x28, 0xfc, 0x24, 0x22, 0x22, 0xe1, 0x0, 0x0, 0x0 },
	{ 0x0, 0x0, 0x0, 0x0, 0x3c, 0x42, 0x2, 0x2, 0x2, 0x2, 0x2, 0x42, 0x3c, 0x10, 0x8, 0x0 },
	{ 0x0, 0x0, 0x4, 0x8, 0x3e, 0x2, 0x2, 0x2, 0x1e, 0x2, 0x2, 0x2, 0x3e, 0x0, 0x0, 0x0 },
	{ 0x0, 0x0, 0x10, 0x8, 0x3e, 0x2, 0x2, 0x2, 0x1e, 0x2, 0x2, 0x2, 0x3e, 0x0, 0x0, 0x0 },
	{ 0x0, 0x0, 0x8, 0x14, 0x3e, 0x2, 0x2, 0x2, 0x1e, 0x2, 0x2, 0x2, 0x3e, 0x0, 0x0, 0x0 },
	{ 0x0, 0x0, 0x22, 0x0, 0x3e, 0x2, 0x2, 0x2, 0x1e, 0x2, 0x2, 0x2, 0x3e, 0x0, 0x0, 0x0 },
	{ 0x0, 0x0, 0x1, 0x2, 0x0, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x0, 0x0, 0x0 },
	{ 0x0, 0x0, 0x4, 0x2, 0x0, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x0, 0x0, 0x0 },
	{ 0x0, 0x0, 0x2, 0x5, 0x0, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x0, 0x0, 0x0 },
	{ 0x0, 0x0, 0x5, 0x0, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x0, 0x0, 0x0 },
	{ 0x0, 0x0, 0x0, 0x0, 0x1e, 0x22, 0x42, 0x42, 0x4f, 0x42, 0x42, 0x22, 0x1e, 0x0, 0x0, 0x0 },
	{ 0x0, 0x0, 0x4c, 0x32, 0x42, 0x42, 0x46, 0x4a, 0x4a, 0x52, 0x62, 0x42, 0x42, 0x0, 0x0, 0x0 },
	{ 0x0, 0x0, 0x8, 0x10, 0x3c, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x3c, 0x0, 0x0, 0x0 },
	{ 0x0, 0x0, 0x10, 0x8, 0x3c, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x3c, 0x0, 0x0, 0x0 },
	{ 0x0, 0x0, 0x18, 0x24, 0x3c, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x3c, 0x0, 0x0, 0x0 },
	{ 0x0, 0x0, 0x4c, 0x32, 0x3c, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x3c, 0x0, 0x0, 0x0 },
	{ 0x0, 0x0, 0x24, 0x0, 0x3c, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x3c, 0x0, 0x0, 0x0 },
	{ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x22, 0x14, 0x8, 0x14, 0x22, 0x0, 0x0, 0x0, 0x0 },
	{ 0x0, 0x0, 0x0, 0x0, 0x7c, 0x62, 0x52, 0x52, 0x4a, 0x4a, 0x46, 0x46, 0x3e, 0x0, 0x0, 0x0 },
	{ 0x0, 0x0, 0x8, 0x10, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x3c, 0x0, 0x0, 0x0 },
	{ 0x0, 0x0, 0x10, 0x8, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x3c, 0x0, 0x0, 0x0 },
	{ 0x0, 0x0, 0x18, 0x24, 0x0, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x3c, 0x0, 0x0, 0x0 },
	{ 0x0, 0x0, 0x24, 0x0, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x3c, 0x0, 0x0, 0x0 },
	{ 0x0, 0x0, 0x10, 0x8, 0x41, 0x41, 0x22, 0x14, 0x8, 0x8, 0x8, 0x8, 0x8, 0x0, 0x0, 0x0 },
	{ 0x0, 0x0, 0x0, 0x0, 0x2, 0x2, 0x3e, 0x42, 0x42, 0x3e, 0x2, 0x2, 0x2, 0x0, 0x0, 0x0 },
	{ 0x0, 0x0, 0x0, 0x0, 0xe, 0x12, 0x12, 0xa, 0x12, 0x22, 0x22, 0x22, 0x1a, 0x2, 0x0, 0x0 },
	{ 0x0, 0x0, 0x0, 0x0, 0x8, 0x10, 0x0, 0x1c, 0x20, 0x3c, 0x22, 0x22, 0x3c, 0x0, 0x0, 0x0 },
	{ 0x0, 0x0, 0x0, 0x0, 0x10, 0x8, 0x0, 0x1c, 0x20, 0x3c, 0x22, 0x22, 0x3c, 0x0, 0x0, 0x0 },
	{ 0x0, 0x0, 0x0, 0x0, 0x8, 0x14, 0x0, 0x1c, 0x20, 0x3c, 0x22, 0x22, 0x3c, 0x0, 0x0, 0x0 },
	{ 0x0, 0x0, 0x0, 0x0, 0x28, 0x14, 0x0, 0x1c, 0x20, 0x3c, 0x22, 0x22, 0x3c, 0x0, 0x0, 0x0 },
	{ 0x0, 0x0, 0x0, 0x0, 0x24, 0x0, 0x0, 0x1c, 0x20, 0x3c, 0x22, 0x22, 0x3c, 0x0, 0x0, 0x0 },
	{ 0x0, 0x0, 0x0, 0x8, 0x14, 0x8, 0x0, 0x1c, 0x20, 0x3c, 0x22, 0x22, 0x3c, 0x0, 0x0, 0x0 },
	{ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xdc, 0x20, 0xfc, 0x22, 0x22, 0xfc, 0x0, 0x0, 0x0 },
	{ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1c, 0x22, 0x2, 0x2, 0x22, 0x1c, 0x8, 0x4, 0x0 },
	{ 0x0, 0x0, 0x0, 0x0, 0x4, 0x8, 0x0, 0x1c, 0x22, 0x3e, 0x2, 0x22, 0x1c, 0x0, 0x0, 0x0 },
	{ 0x0, 0x0, 0x0, 0x0, 0x10, 0x8, 0x0, 0x1c, 0x22, 0x3e, 0x2, 0x22, 0x1c, 0x0, 0x0, 0x0 },
	{ 0x0, 0x0, 0x0, 0x0, 0x8, 0x14, 0x0, 0x1c, 0x22, 0x3e, 0x2, 0x22, 0x1c, 0x0, 0x0, 0x0 },
	{ 0x0, 0x0, 0x0, 0x0, 0x22, 0x0, 0x0, 0x1c, 0x22, 0x3e, 0x2, 0x22, 0x1c, 0x0, 0x0, 0x0 },
	{ 0x0, 0x0, 0x0, 0x0, 0x1, 0x2, 0x0, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x0, 0x0, 0x0 },
	{ 0x0, 0x0, 0x0, 0x0, 0x8, 0x4, 0x0, 0x4, 0x4, 0x4, 0x4, 0x4, 0x4, 0x0, 0x0, 0x0 },
	{ 0x0, 0x0, 0x0, 0x0, 0x4, 0xa, 0x0, 0x4, 0x4, 0x4, 0x4, 0x4, 0x4, 0x0, 0x0, 0x0 },
	{ 0x0, 0x0, 0x0, 0x0, 0xa, 0x0, 0x0, 0x4, 0x4, 0x4, 0x4, 0x4, 0x4, 0x0, 0x0, 0x0 },
	{ 0x0, 0x0, 0x0, 0x0, 0xa, 0x4, 0xa, 0x10, 0x1c, 0x22, 0x22, 0x22, 0x1c, 0x0, 0x0, 0x0 },
	{ 0x0, 0x0, 0x0, 0x0, 0x2c, 0x1a, 0x0, 0x1a, 0x26, 0x22, 0x22, 0x22, 0x22, 0x0, 0x0, 0x0 },
	{ 0x0, 0x0, 0x0, 0x0, 0x4, 0x8, 0x0, 0x1c, 0x22, 0x22, 0x22, 0x22, 0x1c, 0x0, 0x0, 0x0 },
	{ 0x0, 0x0, 0x0, 0x0, 0x10, 0x8, 0x0, 0x1c, 0x22, 0x22, 0x22, 0x22, 0x1c, 0x0, 0x0, 0x0 },
	{ 0x0, 0x0, 0x0, 0x0, 0x8, 0x14, 0x0, 0x1c, 0x22, 0x22, 0x22, 0x22, 0x1c, 0x0, 0x0, 0x0 },
	{ 0x0, 0x0, 0x0, 0x0, 0x2c, 0x1a, 0x0, 0x1c, 0x22, 0x22, 0x22, 0x22, 0x1c, 0x0, 0x0, 0x0 },
	{ 0x0, 0x0, 0x0, 0x0, 0x22, 0x0, 0x0, 0x1c, 0x22, 0x22, 0x22, 0x22, 0x1c, 0x0, 0x0, 0x0 },
	{ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x8, 0x0, 0x3e, 0x0, 0x8, 0x0, 0x0, 0x0, 0x0 },
	{ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3c, 0x32, 0x2a, 0x2a, 0x26, 0x1e, 0x0, 0x0, 0x0 },
	{ 0x0, 0x0, 0x0, 0x0, 0x4, 0x8, 0x0, 0x22, 0x22, 0x22, 0x22, 0x32, 0x2c, 0x0, 0x0, 0x0 },
	{ 0x0, 0x0, 0x0, 0x0, 0x10, 0x8, 0x0, 0x22, 0x22, 0x22, 0x22, 0x32, 0x2c, 0x0, 0x0, 0x0 },
	{ 0x0, 0x0, 0x0, 0x0, 0x8, 0x14, 0x0, 0x22, 0x22, 0x22, 0x22, 0x32, 0x2c, 0x0, 0x0, 0x0 },
	{ 0x0, 0x0, 0x0, 0x0, 0x22, 0x0, 0x0, 0x22, 0x22, 0x22, 0x22, 0x32, 0x2c, 0x0, 0x0, 0x0 },
	{ 0x0, 0x0, 0x0, 0x0, 0x8, 0x4, 0x0, 0x12, 0x12, 0x12, 0x12, 0x12, 0x1c, 0x10, 0xe, 0x0 },
	{ 0x0, 0x0, 0x0, 0x0, 0x0, 0x2, 0x2, 0x1e, 0x22, 0x22, 0x22, 0x22, 0x1e, 0x2, 0x2, 0x0 },
	{ 0x0, 0x0, 0x0, 0x0, 0x12, 0x0, 0x0, 0x12, 0x12, 0x12, 0x12, 0x12, 0x1c, 0x10, 0xe, 0x0 }
	};
	
char default_font_8x8[255][8] = { 
		{ 0x00, 0x18, 0x3C, 0x66, 0x7E, 0x66, 0x66, 0x00 },		// A
};


/**
 * Disegna una stringa nello schermo
 */
void render_write_text(uint8_t size, char *text, uint32_t col, uint32_t x, uint32_t y)
{
	char *str = text;
	uint32_t cx = x;
	
	while(*str != '\0')
	{
		render_write_letter(size, *str, col, cx, y);
		cx = cx + 8;
		str++;
	}
}



/**
 * Disegna una lettera nello schermo
 */
void render_write_letter(uint8_t size, char letter, uint32_t col, uint32_t x, uint32_t y)
{
	char *let_data;
	
	if(size == 16) let_data = default_font_8x16[letter];
	else if (size == 8) let_data = default_font_8x8[letter];
	
	
	int i;
	int j;
	
	for(i = 0; i < size; i++)
	{
		for(j = 0; j < 8; j++)
		{			
			if((let_data[i] & (1 << j)) > 0)
				render_draw_pixel(x+j, y+i-4, (uint32_t) col);
		}
	}
}


/**
 * Disegna una linea
 */
void render_draw_line(uint32_t x0, uint32_t y0, uint32_t x1, uint32_t y1, uint32_t col)
{
	uint32_t x = x0;
	uint32_t y = y0;
	
	while(x < x1 || y < y1)
	{
		uint32_t c = (vesa_get_pixel(x0, y0) + col) / 2;
		
		render_draw_pixel(x, y, col);
		
		if(x < x1) x++;
		if(y < y1) y++;
	}
}

/**
 * Disegna un rettangolo
 */
void render_draw_rect(uint32_t x0, uint32_t y0, uint32_t x1, uint32_t y1, uint32_t col)
{
	render_draw_line(x0, y0, x0, y1, col);
	render_draw_line(x0, y0, x1, y0, col);
	
	render_draw_line(x1, y0, x1, y1, col);
	render_draw_line(x0, y1, x1, y1, col);	
}


/**
 * Disegna un rettangolo pieno
 */
void render_draw_rect_fill(uint32_t x0, uint32_t y0, uint32_t x1, uint32_t y1, uint32_t fill)
{
	while(y0 <= y1)
	{
		render_draw_line(x0, y0, x1, y0, fill);	
		y0++;
	}
}


/**
 * Disegna un rettangolo pieno col bordo
 */
void render_draw_rect_bordered(uint32_t x0, uint32_t y0, uint32_t x1, uint32_t y1, 
								uint8_t border_pix, uint32_t border, uint32_t fill)
{
	render_draw_rect_fill(x0, y0, x1, y1, fill);
	render_draw_rect(x0, y0, x1, y1, border);
}






/**
 * Renderizza una mappa di bit
 */
void render_bit_map(uint32_t *data, uint32_t x, uint32_t y, uint32_t sx, uint32_t sy)
{
	uint32_t i,j;
	
	for(i = 0; i < (sy); i++)
		for(j = 0; j < (sx); j++)
			render_draw_pixel(x + j, y + i, data[(i*j)]); 
}



/**
 * Renderizza un immagine esportata con gimp
 */
void render_gimp_image(gimp_image *gi, uint32_t x, uint32_t y)
{
	uint32_t i,j;
	
	for(i = 0; i < gi->width; i++)
		for(j = 0; j < gi->height; j++)
		{
			uint32_t col = 
				(gi->pixel_data[((i*4*gi->width)+j*4)+3] << 24) |
				(gi->pixel_data[((i*4*gi->width)+j*4)+1] << 16) |
				(gi->pixel_data[((i*4*gi->width)+j*4)+2] << 8)  | 
				(gi->pixel_data[(i*4*gi->width)+j*4]);
			
			if(col != 0)	
				render_draw_pixel(x + j, y + i, col); 	
		}
	
}


/**
 * Prende un pixel dal buffer
 */
uint32_t render_get_pixel(uint32_t x, uint32_t y)
{
	if (x<0 || x > vesa_get_mode_info()->width  || y<0 || y>vesa_get_mode_info()->height) return;
	x = (x*(vesa_get_mode_info()->bits_per_pixel>>3));
	y = (y*vesa_get_mode_info()->bytes_per_scan_line);
	
	register char * cTemp;
	cTemp = &render_buffer[x+y];
	return (cTemp[0] + (cTemp[1]<<8) + (cTemp[2]<<16));
}


/**
 * Disegna un carattere sul buffer
 */
void render_draw_pixel(uint32_t x, uint32_t y, uint32_t cl)
{
	if (x<0 || x > vesa_get_mode_info()->width  || y<0 || y>vesa_get_mode_info()->height) return;
	x = (x*(vesa_get_mode_info()->bits_per_pixel>>3));
	y = (y*vesa_get_mode_info()->bytes_per_scan_line);
	
	//cl = (cl + render_get_pixel(x,y)) / 2;
	
	register char * cTemp;
	cTemp = &render_buffer[x+y];
	cTemp[0] = cl & 0xff;
	cTemp[1] = (cl>>8) & 0xff;
	cTemp[2] = (cl>>16) & 0xff;
}



/**
 * Disegna il cursore
 */
void render_draw_cursor(uint32_t x, uint32_t y)
{
	render_draw_line(x - 5, y - 1, x + 5, y - 1, 0x0);
	render_draw_line(x - 5, y, x + 5, y, 0xFFFFFF);
	render_draw_line(x - 5, y + 1, x + 5, y + 1, 0x0);
	render_draw_line(x - 1, y - 5, x - 1, y + 5, 0x0);
	render_draw_line(x + 1, y - 5, x + 1, y + 5, 0x0);
	render_draw_line(x - 5, y, x + 5, y, 0xFFFFFF);	
	render_draw_line(x, y - 5, x, y + 5, 0xFFFFFF);
}

